const fs = require('fs')
const schedule = require('node-schedule')
const moment = require('moment')

// 异步地把 oldPath 文件重命名为 newPath 提供的路径名。 如果 newPath 已存在，则覆盖它
// fs.rename('text.txt', 'new.txt', (error) => {
//   if (error) throw error
//   console.log('重命名完成！')
// })

// 异步地追加数据到文件，如果文件尚不存在则创建 文件
// fs.appendFile('newutil/seq.log', '/n追加的数据444', 'utf8', (error) => {
//   if (error) throw error
//   console.log('数据已被追加到文件')
// })

// function scheduleFun () {
//   schedule.scheduleJob('myid', '0/1 * * * * *', () => {
//     console.log('任务执行成功')
//   })
//   setTimeout(() => {
//     schedule.cancelJob('myid')
//     console.log('任务执行取消')
//   }, 5000)
// }
// scheduleFun()

// 异步地写入文件，如果文件存在，该方法默认是 w 模式，默认写入的内容会覆盖旧的文件的内容
// fs.writeFile('new.txt', 'Hello, Node.js fs', (error) => {
//   if (error) throw error
//   console.log('数据已被追加到文件')
// })

// 异步地创建目录 fs.mkdir(path[,  options], callback)
// recursive 是否以递归的方式创建目录，默认为 false

// 不管创建的目录 dir 和 dir/dir1 是否存在
// fs.mkdir('dir/dir1', { recursive: true }, (err) => {
//   if (err) throw err
//   console.log('创建目录成功')
// })

// dir 目录必须存在
// fs.mkdir('dir/dir2', (err) => {
//   if (err) throw err
//   console.log('创建目录成功')
// })

// 异步打开文件 r+ 读写
// fs.open('new.txt', 'r+', (err, fd) => {
//   if (err) throw err
//   console.log('文件打开成功 ')
// })

// 异步地读取文件的全部内容，如果文件内容是字符串的话，可以指定字符编码
// fs.readFile('new.txt', 'utf8', (err, data) => {
//   if (err) throw err
//   console.log(data)
// })

// 异步地读取目录的内容，其中 files 是目录中文件的名称的数组
// fs.readdir('dir', 'utf8', (err, files) => {
//   if (err) throw err
//   console.log(files)
// })

// 异步读取文件  fs.read(fd, buffer, offset, length, position, callback)
// 异步关闭文件 fs.close(fd, callback) fd 标识通过 fs.open() 方法返回的文件描述符
// fs.open('new.txt', 'r+', (err, fd) => {
//   if (err) throw err
//   console.log('文件打开成功')
//   console.log('准备读取文件')
//   let buf = new Buffer.alloc(1024)
//   fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
//     if (err) throw err
//     console.log(bytes + ' 字节被读取')

//     // 仅输出读取的字节
//     if (bytes > 0) {
//       console.log(buf.slice(0, bytes).toString())
//     }

//     // 关闭文件
//     fs.close(fd, err => {
//       if (err) throw err
//       console.log('文件关闭成功')
//     })
//   })
// })


// 获取文件大小，创建时间等信息，可以使用fs.stat()，它返回一个Stat对象，能告诉我们文件或目录的详细信息：
// fs.stat('new.txt', (error, stats) => {
//   if (error) throw error
//   console.log(stats)
//   console.log('isFile:' + stats.isFile())
//   console.log('isDirectory:' + stats.isDirectory())
//   if (stats.isFile()) {
//     console.log('size:' + stats.size)
//     console.log('birth time:' + stats.birthtime)
//     console.log('modified time:' + stats.mtime)
//   }
// })

// 异步截取文件 fs.ftruncate(fd, len, callback)
// fs.open('new.txt', 'r+', (err, fd) => {
//   if (err) throw err
//   console.log('文件打开成功')
//   console.log('截取10字节内的文件内容，超出部分将被去除')
//   let buf = new Buffer.alloc(1024)
  
  // 截取文件
//   fs.ftruncate(fd, 10, err => {
//     if (err) throw err
//     console.log('文件截取成功')
//     console.log('读取相同的文件')
//     fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => {
//       if (err) throw err
//       console.log(bytes + ' 字节被读取')
  
//       // 仅输出读取的字节
//       if (bytes > 0) {
//         console.log(buf.slice(0, bytes).toString())
//       }
  
//       // 关闭文件
//       fs.close(fd, err => {
//         if (err) throw err
//         console.log('文件关闭成功')
//       })
//     })
//   })
// })

// 删除文件
// fs.unlink('e.txt', err => {
//   if (err) throw err
//   console.log('文件删除成功')
// })


// 删除目录 fs.rmdir(papth, callback)
// fs.rmdir('dir/dir2', err => {
//   if (err) throw err
//   console.log('读取 dir 目录')
//   fs.readdir('dir', (err, files) => {
//     if (err) throw err
//     console.log(files)
//   })
// })

// 检查文件是否存在于当前目录中
// fs.access('new.txt', fs.constants.F_OK, err => {
//   if (err) throw err
//   console.log(`file ${err ? '不存在' : '存在'}`)
// })